from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client
from django.utils.deconstruct import deconstructible

@deconstructible
class MyStorage(Storage):

    # def __init__(self, option=None):
    #     if not option:
    #         option = settings.CUSTOM_STORAGE_OPTIONS


    def _open(self, name, mode='rb'):
        pass

    def _save(self, name, content, max_length=None):

        #1.创建客户端，加载配置文件
        client = Fdfs_client('utils/fdfs/client.conf')
        #2.获取图片资源 (读取图片二进制，因为 name 只是图片的名字不是路径)
        # name              图片名
        # content           图片的内容

        data = content.read()


        #3.上传
        # upload_by_buffer 上传二进制
        result = client.upload_by_buffer(data)

        #4.根据上传的状态来获取 Remote file_id
        if result.get('Status') == 'Upload successed.':
            return result.get('Remote file_id')
        # 把file_id 返回回去，因为系统要使用

    # exists 存在
    # 返回图片是否存在
    # 我们的 fdfs已经做过图片的重名处理了
    # 所以不需要判断是否存在，尽管上传就可以
    def exists(self, name):

        return False



    def url(self, name):
        # name 其实就是 当时返回的 Remote file_id
        #group1/M00/00/02/wKjllFylxaqAJa_aAAGByoOJNyU682.jpg

        # 默认是返回 name 的
        # 为了让我们访问的方便，我们可以 返回 拼接号的url
        return 'http://192.168.161.133:8888/' + name